/* 逻辑
  1.页面加载的时候
    1.从缓存中获取购物车数据， 渲染到缓存中
      这些数据的 checked=true
  2.微信支付
    1.哪些人或者那些账号可以实现微信支付
      1.企业账号
      2.企业账号的小程序后台 必须给开发者 添加上白名单
        1.一个APPid 可以同时绑定多个开发者
        2.这些开发者就可以共用这个APPid 和他的开发权限
  3.点击支付按钮
    1.判断缓存中有无token
    2.如果没有 跳转到授权页面 开启权限 获取token
    3.有token 继续执行
    4.创建订单 获取订单编号
    5.已经完成支付之后
    6.手动删除缓存中已经被选中的商品
    7.把删除后的购物车数据 重新设置到缓存中
    8.跳转页面

*/
import {
  getSetting,
  chooseAddress,
  openSetting,
  showModal,
  showToast,
  requestPayment
} from "../../utils/asyncWx.js";
import regeneratorRuntime from "../../lib/runtime/runtime.js";
import {
  request
} from "../../request/request.js";

Page({
  data: {
    address: {},
    cart: [],
    totalPrice: 0,
    totalNum: 0
  },
  onShow() {
    //1.获取缓存中的收货地址信息
    const address = wx.getStorageSync("address");
    // 获取缓存中的购物车数据
    let cart = wx.getStorageSync("cart") || [];
    // 过滤后的购物车数组
    cart = cart.filter(v => v.checked);
    this.setData({
      address
    });
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
      totalPrice = v.num * v.goods_price;
      totalNum += v.num;
    });
    this.setData({
      cart,
      totalPrice,
      totalNum,
      address
    });
  },
  //点击支付功能
  async handleOrderPay() {
    try {
      //1.判断缓存有无token
      const token = wx.getStorageSync("token");
      //2.判断
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/auth'
        });
        return;
      }
      //3.创建订单
      //3.1准备请求头参数
      // const header = {
      //   Authorization: token
      // };
      //3.2准备请求体参数
      const order_price = this.data.totalPrice;
      const consignee__addr = this.data.address.all;
      const cart = this.data.cart;
      let goods = [];
      cart.forEach(v => v.goods.push({
        goods_id: v.goods_id,
        goods_number: v.num,
        goods_price: v.goods_price
      }))
      //数据获取已完成
      const orderParams = {
        order_price,
        consignee__addr,
        goods
      };
      //4.发送请求 创建订单 获取订单编号
      const {
        order_number
      } = await request({
        url: "/my/orders/create",
        method: "post",
        data: orderParams
      });
      //5.发起预支付请求
      const {
        pay
      } = await request({
        url: "/my/orders/req_unifiedorder",
        method: "post",
        data: order_number
      });
      //6.发起微信支付
      await requestPayment(pay);
      //7.查询后台订单状态
      const res = await request({
        url: "/my/orders/chkOrder",
        method: "post",
        data: order_number
      });
      await showToast({title:"支付成功"});
      //8.手动删除缓存中已经选中的商品
      let newCart = wx.getStorageSync("cart");
      newCart=newCart.filter(v=>!v.checked);
      wx.setStorageSync("cart", newCart);
      //10.支付成功后 跳转到订单页面
      wx.navigateTo({
        url: '/pages/order/order'
      });
    } catch (error) {
      await showToast({title:"支付失败"});
      console.log(error);
      
    }

  }
})